<template>
  <div class="common-layout">
    <el-container>
      <el-header class="header">
        <el-text class="header-text">抢点班作业后台管理</el-text>
        <el-button class="header-button" type="primary" text style="float: right;" @click="logout">退出登录</el-button>
      </el-header>
      <el-main class="main">
        <div class="main-title">
          <div class="main-title-text" style="float: left;">
            新建作业
          </div>
          <div>
            <el-button class="main-button" @click="back">返回上一页</el-button>
          </div>
        </div>
        <div class="main-back">
          <el-form :model="form" label-width="auto" style="max-width: 700px" size="large">
            <el-form-item label="作业名称">
              <el-input v-model="form.Name" placeholder="请输入"></el-input>
            </el-form-item>
            <el-form-item label="提交时间" style="width: 70%">
              <el-date-picker v-model="form.picker" type="daterange" range-separator="至" start-placeholder="开始日期"
                end-placeholder="结束日期" />
            </el-form-item>
            <el-form-item label="作业归属">
              <el-select v-model="form.ClubType" placeholder="请选择" style="width: 100%">
                <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
              </el-select>
            </el-form-item>
            <el-form-item label="关联文章">
              <el-autocomplete v-model="articleTitle" :fetch-suggestions="queryArticleList" placeholder="请输入"
                @select="handleSelectArticle"  clearable @change="handleArticleChange"/>
            </el-form-item>
            <el-form-item label="关联直播">
              <el-select v-model="form.LiveId" placeholder="请选择" style="width: 100%" clearable @change="handleLiveChange">
                <el-option v-for="item in live" :key="item.id" :label="item.name" :value="item.id" />
              </el-select>
            </el-form-item>
            <el-form-item label="选择类型">
              <div>
                <el-button type="primary" @click="addSingleChoice">添加单选</el-button>
                <el-button type="primary" @click="addMultipleChoice">添加多选</el-button>
                <el-button type="primary" @click="addBlank">添加单选填空</el-button>
              </div>
            </el-form-item>
            <div class="question-container" v-for="(question, index) in questions" :key="index"
              :class="{ 'bg-change': isHovered[index] }" @mouseenter="handleMouseEnter(index)"
              @mouseleave="handleMouseLeave(index)">
              <div class="question-title">
                {{ questionPrefix(index) }} {{ getQuestionTypeText(question.type) }}
              </div>
              <div style="width: 600px;">
                <el-input v-model="question.description" />
              </div>
              <div class="add" v-if="question.type !== 'blank'">
                <div class="question-option">
                  <span>设置选项:</span>
                  <el-button type="primary" text @click="addOption(index)">添加</el-button>
                </div>
                <div v-for="(option, optionIndex) in question.content" :key="optionIndex">
                  <div class="select" style="display: flex;">
                    <div class="selection-item" style="display: flex;">
                      <div style="width: 550px;">
                        <el-input v-model="question.content[optionIndex].text" />
                      </div>
                      <div>
                        <el-button type="primary" text @click="removeOption(index, optionIndex)">删除</el-button>
                      </div>
                    </div>
                  </div>
                </div>
                <div class="delete" style="margin-left: 50px;">
                  <el-button type="info" plain @click="removeQuestion(index)">删除</el-button>
                </div>
              </div>
            </div>
            <div class="submit">
              <el-button type="primary" :disabled="!form.Name||!form.picker" @click="onSubmit">确认</el-button>
            </div>
          </el-form>
        </div>
      </el-main>
    </el-container>
  </div>

</template>

<script lang="ts" setup>
import { ref, onMounted, computed } from 'vue'
import AddWorkApi from '../api/AddWorkApi';
import _ from 'lodash';
import dayjs from 'dayjs';
import { ElMessage } from 'element-plus'
import LoginApi from '../api/LoginApi';
import axios from 'axios';
import { useRouter } from 'vue-router';
import { useTokenStore } from '../stores/token';
import { useUserStore } from '../stores/user';

const router = useRouter();

const options = ref([
  { id: 1, name: '牧民俱乐部' },
  { id: 2, name: '博古论坛' },
  { id: 3, name: '神枪手俱乐部' },
  { id: 4, name: '环球俱乐部' },
  { id: 5, name: '价值投资' },
  { id: 6, name: '波段行情' },
  { id: 7, name: '抄底卖顶' },
  { id: 8, name: '资金及仓位管理' },
  { id: 9, name: '财富的游戏' },

]);

// do not use same name with ref
const form = ref({
  Name: '',
  ClubType: '',
  ArticleId: '',
  LiveId: '',
  picker: [],
  StartDate: '',
  EndDate: '',
  Questions: []
});
const articleTitle = ref('');
// 问题列表数据
const questions = ref([]);
const onSubmit = () => {
  // 从picker中获取日期数据并进行格式转换
  if (form.value.picker && form.value.picker.length === 2) {
    const startDate = dayjs(form.value.picker[0]).format('YYYY-MM-DD HH:mm:00');
    const endDate = dayjs(form.value.picker[1]).format('YYYY-MM-DD HH:mm:00');
    form.value.StartDate = startDate;
    form.value.EndDate = endDate;
  }
  form.value.Questions = questions.value;
  AddWorkApi.addWork(form.value)
  console.log(questions.value+'--------------')
}
const back = () => {
  window.history.back()
}



// 存储根据文章输入内容查询到的关联文章结果列表
const articleSearchResults = ref([]);
// 根据文章输入内容查询关联文章的函数
const queryArticleList = async (queryString: string) => {
  if (form.value.LiveId) {
    ElMessage.warning('您已关联直播，暂无法关联文章');
    articleTitle.value = ''; // 清空文章标题输入框
    form.value.LiveId = '';
    return [];
  }
  try {
    const response = await AddWorkApi.getArticleList(queryString);
    const formattedResults = response.data.map(article => ({
      value: article.title,
      label: article.id
    }));
    articleSearchResults.value = formattedResults;
    return formattedResults;
  } catch (error) {
    console.error('查询关联文章失败', error);
    return [];
  }
};
// 处理选择文章的函数
const handleSelectArticle = (article: { label: string }) => {
  // 这里可以根据业务需求，比如将选中的文章id（article.label）传递给其他地方使用等
  console.log('选中的文章id', article.label);
  form.value.ArticleId = article.label; // 将选中文章的id赋值给对应表单字段，用于传递给后端
  const selectedArticle = articleSearchResults.value.find(a => a.label === article.label);
  if (selectedArticle) {
    articleTitle.value = selectedArticle.value; // 更新显示的文章题目
  }
};
const handleLiveChange = () => {
  if (form.value.ArticleId) {
    ElMessage.warning('您已关联文章，暂无法关联直播');
    form.value.LiveId = ''; // 清空关联直播选择框的值
    form.value.ArticleId = '';
    articleTitle.value = '';
  }
};

//获取直播列表
const live = ref([]);
function getLive() {
  AddWorkApi.getLiveList()
    .then(res => {
      live.value = res.data;
      console.log(live.value);
    })
    .catch(error => {
      console.error('获取直播列表失败', error)
    })
}
getLive();

// 根据类型获取对应的题目类型文本显示
const getQuestionTypeText = (type) => {
  switch (type) {
    case 1:
      return '作业题目(单选)';
    case 2:
      return '作业题目(多选)';
    case 3:
      return '作业题目(简答题)';
    default:
      return '未知类型题目';
  }
};

const addSingleChoice = () => {
  questions.value.push({
    type: 1,  // 假设1代表单选，和后端格式对应起来
    description: '',
    content: [{ "id": "", "text": "" },{ "id": "", "text": "" }]
  });
};

const addMultipleChoice = () => {
  questions.value.push({
    type: 2,  // 假设2代表多选，和后端格式对应起来
    description: '',
    content: [{ "id": "", "text": "" },{ "id": "", "text": "" }]
  });
};

const addBlank = () => {
  questions.value.push({
    type: 3,  // 假设3代表简答题，和后端格式对应起来
    description: '',
    content: [{ "id": "", "text": "" }]
  });
};

// const addOption = (questionIndex) => {
//   const currentQuestion = questions.value[questionIndex];
//   const currentContent = JSON.parse(currentQuestion.content);
//   currentContent.push({ "id": "", "text": "" });
//   currentQuestion.content = JSON.stringify(currentContent);
// };

// const removeOption = (questionIndex, optionIndex) => {
//   const currentQuestion = questions.value[questionIndex];
//   const currentContent = JSON.parse(currentQuestion.content);
//   currentContent.splice(optionIndex, 1);
//   currentQuestion.content = JSON.stringify(currentContent);
// };
const addOption = (questionIndex) => {
    const currentQuestion = questions.value[questionIndex];
    // 如果当前题目没有content属性，则初始化一个空数组
    if (!currentQuestion.content) {
        currentQuestion.content = [];
    }
    currentQuestion.content.push({ id: "", text: "" });
};
const removeOption = (questionIndex, optionIndex) => {
    const currentQuestion = questions.value[questionIndex];
    currentQuestion.content.splice(optionIndex, 1);
};
const removeQuestion = (questionIndex) => {
  questions.value.splice(questionIndex, 1);
};

// 计算属性，用于生成序号前缀
const questionPrefix = computed(() => {
  return (index) => {
    return `${index + 1}、`;
  };
})

// 用于存储每个问题标题是否被鼠标悬停的状态，初始化为false
const isHovered = ref(Array(questions.value.length).fill(false));
const handleMouseEnter = (index) => {
  isHovered.value[index] = true;
};

const handleMouseLeave = (index) => {
  isHovered.value[index] = false;
};

// 在组件挂载后初始化 `isHovered` 数组长度与 `questions` 数组长度一致
onMounted(() => {
  isHovered.value = Array(questions.value.length).fill(false);
});


//退出
function logout(){
    //清除登录信息
    const tokenStore = useTokenStore();
    const userStore = useUserStore();
    tokenStore.clear();
    userStore.clear();
    LoginApi.logout().then(res => {
    console.log(res)
  })
  router.push('/')
}
</script>

<style scoped>
.submit {
  margin: 100px 212px;
}

.submit .el-button {
  padding: 25px 150px;
}

.question-title {
  transition: background-color 0.3s ease;
}

.bg-change {
  background-color: rgba(200, 200, 200, 0.3);
}

.question-title {
  margin-bottom: 10px;
}

.select {
  margin: 10px 0px 0px;
}

.delete {
  position: absolute;
  right: 10px;
  bottom: 0px;
}

.add {
  position: relative;
}

.question-container {
  margin: 20px 0;
  padding: 10px 20px;
  width: 750px;
  border-bottom: 1px solid #e5e5e5;
}

.header {
  height: 100px;
  line-height: 100px;
  padding: 0 80px;
}

.header-text {
  font-size: 22px;
  font-weight: 500;
  color: black;
  float: left;
}

.header-button {
  margin-top: 30px;
}

.main {
  padding: 30px 212px;
  background-color: #F8F8F8;
}

.main-title {
  font-size: 16px;
  background-color: white;
  font-weight: bold;
  height: 60px;
  border-bottom: 2px solid #ececec;
  padding: 0 15px;
  line-height: 52px;
}

.main-button {
  margin: 10px 15px 0 0;
  padding: 12px 20px;
  height: 40px;
  float: right;
}

.el-form {
  padding: 30px 78.5px;
  margin: auto;
}

.el-form-item {
  --font-size: 16px;
  margin: 0 0 25px;
}

.main-back {
  background-color: white;
}
</style>